package servlet.user;

import com.alibaba.fastjson.JSON;
import pojo.Result;
import pojo.User;
import service.UserService;
import service.impl.UserServiceImpl;
import utils.JsonUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.stream.Collectors;


@WebServlet("/user/login")
public class Login extends HttpServlet {
    UserService userService = new UserServiceImpl();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从请求体获取前端发送的完整JSON数据
        String loginData = req.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
        String code = (String) req.getSession().getAttribute("code");
        Result result = new Result();//用户输入的验证码
        // 把JSON数据中的code字段解析为Java字符串：
        String inputCode = JsonUtils.extractCodeAsString(loginData, "code");
//        String inputCode = req.getParameter("code");  // 用工具类转化而不是直接用getParameter获取
        if(!code.equals(inputCode)){
            result = Result.error("验证码不正确！");
            // 将 Result 对象转换为 JSON 字符串
            String jsonResponse = JSON.toJSONString(result);
            // 将 JSON 字符串作为响应发送给前端
            resp.getWriter().write(jsonResponse);
            return;
        }
        // 从请求中获取登录数据，假设登录数据是一个 JSON 字符串，包含用户名和密码

        if (loginData == null || loginData.isEmpty()) {
            result = Result.error("登录数据不能为空");
            resp.setContentType("application/json;charset=UTF-8");
            resp.getWriter().write(JSON.toJSONString(result));
            return;
        }
        // 将登录数据从 JSON 字符串转换为 User 对象
        User user = JsonUtils.jsonToPojo(loginData, User.class);
        // 调用服务层的登录方法，进行登录验证
        User currentUser = userService.login(user);     // 需要返回用户，方便存入session中
        boolean loginSuccess = currentUser != null;
        if (loginSuccess) {
            req.getSession().setAttribute("user", currentUser);
            /*
                result:{
                    code:1,
                    message:"success",
                    date:1(普通用户) / 2(管理员用户)
                }
             */
            result = Result.success(currentUser.getStatus());

        } else {
            result = Result.error("登录失败，请检查用户名和密码");
        }
        // 设置响应的内容类型为 application/json 并设置编码为 UTF-8
        resp.setContentType("application/json;charset=UTF-8");
        // 将 Result 对象转换为 JSON 字符串
        String jsonResponse = JSON.toJSONString(result);
        // 将 JSON 字符串作为响应发送给前端
        resp.getWriter().write(jsonResponse);
        resp.getWriter().close();
        resp.getWriter().flush();
    }
}